//package moni.anyou.com.view.agora;
//
//import android.app.Activity;
//import android.content.SharedPreferences;
//import android.os.Build;
//import android.os.Handler;
//import android.preference.PreferenceManager;
//
//import android.util.DisplayMetrics;
//import android.util.Log;
//import android.view.SurfaceView;
//import android.view.View;
//import android.view.ViewTreeObserver;
//import android.view.Window;
//import android.widget.Toast;
//
//import androidx.recyclerview.widget.GridLayoutManager;
//import androidx.recyclerview.widget.RecyclerView;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.util.ArrayList;
//import java.util.List;
//
//
//import io.agora.largegroupcall.model.AGEventHandler;
//import io.agora.largegroupcall.model.ConstantApp;
//import io.agora.largegroupcall.model.EngineConfig;
//import io.agora.largegroupcall.model.MyEngineEventHandler;
//import io.agora.largegroupcall.model.UserItem;
//import io.agora.largegroupcall.model.WorkerThread;
//import io.agora.rtc.Constants;
//import io.agora.rtc.RtcEngine;
//import io.agora.rtc.video.VideoCanvas;
//import moni.anyou.com.view.config.AnyouerApplication;
//
//public class ChatGroupLiveRoomHelper implements AGEventHandler {
//
//    public final static Logger log = LoggerFactory.getLogger(ChatGroupLiveRoomHelper.class);
//    public Activity activity;
//    public List<UserItem> userItemList = new ArrayList<>(); //small 16 windows
//    public UserItem mUserItem;//one big window
//
//    public final int MODE_ONE_BIG = 0;
//    public final int MODE_SHOW_FOUR = 1;
//    public int stateMode = MODE_SHOW_FOUR; // 0 : one big with 16 small, 1: 17 small, show 4
//    public int screenWidth;
//    public int screenHeight;
//
//    /**房间号*/
//    public String roomId;
//    /**数据流*/
//    public int cRole;
//
//
//
//    LiveRoomEvent liveRoomEventListen;
//    public interface LiveRoomEvent{
//
//        void doRenderRemoteUi(int uid, List<UserItem> userItemList, UserItem appendUserItem);
//
//        void onJoinChannelSucces(UserItem mUserItem);
//
//        void doRemoveRrmoteUi(UserItem removeItem);
//    }
//
//    public LiveRoomEvent getLiveRoomEventListen() {
//        return liveRoomEventListen;
//    }
//
//    public ChatGroupLiveRoomHelper setLiveRoomEventListen(LiveRoomEvent liveRoomEventListen) {
//        this.liveRoomEventListen = liveRoomEventListen;
//        return this;
//    }
//
//    public ChatGroupLiveRoomHelper(Activity activity, String roomId, int cRole) {
//        this.activity = activity;
//        this.roomId = roomId;
//        this.cRole = cRole;
//    }
//
//    public void init() {
//        log.debug("sdk version：：" + rtcEngine().getSdkVersion());
//        Log.d("test","config.muid:"+config().mUid);
//
//        final View layout = activity.findViewById(Window.ID_ANDROID_CONTENT);
//        ViewTreeObserver vto = layout.getViewTreeObserver();
//        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
//            @Override
//            public void onGlobalLayout() {
//                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
//                    layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
//                } else {
//                    layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//                }
//                initUIandEvent();
//            }
//        });
//
//    }
//
//
//    /**关闭自己的的直播推流*/
//    public void closeMyStream(){
//        rtcEngine().enableLocalAudio(false);
//        rtcEngine().enableLocalVideo(false);
//        rtcEngine().muteLocalAudioStream(false);
//        rtcEngine().muteLocalVideoStream(false);
//    }
//
//
//
//    public void initUIandEvent() {
//        event().addEventHandler(this);
//        log.debug("initUIandEvent ");
//
//        DisplayMetrics displayMetrics = new DisplayMetrics();
//        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//        screenWidth = displayMetrics.widthPixels;
//        screenHeight = displayMetrics.heightPixels;
//        doConfigEngine(cRole);
//
//
//        addBigSurfaceView(config().mUid);
//        initModeState();
//
//        worker().joinChannel(roomId, config().mUid);
//
//    }
//
//    public void addBigSurfaceView(int uid) {
//        log.debug("addBigSurfaceView uid :" + uid);
//        Log.d("test","config.muid:"+config().mUid);
//        SurfaceView surfaceV = RtcEngine.CreateRendererView(activity);
//        mUserItem = new UserItem(uid, surfaceV, true);
//
//        mUserItem.setmIsMuteStream(false);
//        rtcEngine().setupLocalVideo(new VideoCanvas(surfaceV, VideoCanvas.RENDER_MODE_HIDDEN, uid));
//        worker().preview(true, surfaceV, uid);
//
//
//        surfaceV.setZOrderOnTop(false);
//        surfaceV.setZOrderMediaOverlay(false);
//
//        if (stateMode == MODE_ONE_BIG) {
////            mParentView.addView(surfaceV, 0);
//
//        } else if (stateMode == MODE_SHOW_FOUR) {
//            userItemList.add(0, mUserItem);
//        }
//
//        if(liveRoomEventListen!=null)
//        {
//            liveRoomEventListen.doRenderRemoteUi(uid,userItemList,mUserItem);
//        }
//
//
//    }
//
//
//    /**切换摄像头*/
//    public void switchCamera(){
//        worker().getRtcEngine().switchCamera();
//    }
//
//    /**关闭麦克风*/
//    public void closemuteLocalAudioStream(){
//        worker().getRtcEngine().muteLocalAudioStream(false);
//    }
//
//
//    public void doConfigEngine(int cRole) {
//        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(activity);
//        int prefIndex = pref.getInt(ConstantApp.PrefManager.PREF_PROPERTY_PROFILE_IDX, ConstantApp.DEFAULT_PROFILE_IDX);
//        if (prefIndex > ConstantApp.VIDEO_PROFILES.length - 1) {
//            prefIndex = ConstantApp.DEFAULT_PROFILE_IDX;
//        }
//        int vProfile = ConstantApp.VIDEO_PROFILES[prefIndex];
//
//        worker().configEngine(cRole, vProfile);
//
//        rtcEngine().setParameters("{\"che.audio.live_for_comm\":true}");
//        rtcEngine().setParameters("{\"che.video.moreFecSchemeEnable\":true}");
//
//        log.debug("doConfigEngine vProfile : " + vProfile);
//        if (vProfile == Constants.VIDEO_PROFILE_480P) {
//            rtcEngine().setParameters("{\"che.video.lowBitRateStreamParameter\":{\"width\":240,\"height\":320,\"frameRate\":15,\"bitRate\":140}}");
//
//        } else {
//            rtcEngine().setParameters("{\"che.video.lowBitRateStreamParameter\":{\"width\":180,\"height\":320,\"frameRate\":15,\"bitRate\":140}}");
//        }
//        rtcEngine().enableDualStreamMode(true);
//    }
//
//    /**销毁1*/
//    public void onDestroy() {
//        deInitUIandEvent();
//    }
//
//    /**销毁2*/
//    public void doLeaveChannel() {
//        worker().leaveChannel(config().mChannel);
//        worker().preview(false, null, 0);
//
//    }
//
//
//    /**销毁3*/
//    public void deInitUIandEvent() {
//        doLeaveChannel();
//        event().removeEventHandler(this);
//        userItemList.clear();
//    }
//
//
//    /**第一个远程视频解析*/
//    @Override
//    public void onFirstRemoteVideoDecoded(int uid, int width, int height, int elapsed) {
//        log.debug("onFirstRemoteVideoDecoded " + width + " " + height + " " + (uid & 0XFFFFFFFFL) + " ");
//    }
//
//
//
//    /**获取远程流*/
//    public void doRenderRemoteUi(final int uid) {
//        activity.runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
//                if (activity.isFinishing()) {
//                    return;
//                }
//
//                log.debug("doRenderRemoteUi   uid :" + uid + " mUserItem :" + mUserItem + "  size :" + userItemList.size());
//
//                if (isExitUid(uid)) {
//
//                    return;
//                }
//
//                SurfaceView surfaceV = RtcEngine.CreateRendererView(activity.getApplicationContext());
//                surfaceV.setZOrderMediaOverlay(true);
//                UserItem appendUserItem = new UserItem(uid, surfaceV, false);
//                userItemList.add(appendUserItem);
//                log.debug("doRenderRemoteUi userItemList" + " " + userItemList.size() + " uid :" + uid);
//
//                rtcEngine().setupRemoteVideo(new VideoCanvas(surfaceV, VideoCanvas.RENDER_MODE_HIDDEN, uid));
//                rtcEngine().muteRemoteAudioStream(uid, true);
//
//
//                if(liveRoomEventListen!=null) {
//                    liveRoomEventListen.doRenderRemoteUi(uid, userItemList, appendUserItem);
//                }
////
////                if (stateMode == MODE_ONE_BIG) {
////                    rtcEngine().setRemoteVideoStreamType(uid, Constants.VIDEO_STREAM_LOW);
////                    adapter.notifyItemRangeChanged(userItemList.size() - 1, 1);
////                } else if (stateMode == MODE_SHOW_FOUR) {
////                    rtcEngine().setRemoteVideoStreamType(uid, Constants.VIDEO_STREAM_HIGH);
////                    resetGridLayoutSpaceCount();
////                    adapterShowFour.notifyItemRangeChanged(userItemList.size() - 1, 1);
////                }
//
//
//
//            }
//        });
//    }
//
//    /**当加入频道成功时*/
//    @Override
//    public void onJoinChannelSuccess(final String channel, final int uid, final int elapsed) {
//        activity.runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
//                if (activity.isFinishing()) {
//                    return;
//                }
//
//                if (isExitUid(uid)) {
//                    return;
//                }
//
//                log.debug("onJoinChannelSuccess " + channel + " " + uid + " " + elapsed + " ");
//                worker().getEngineConfig().mUid = uid;
//                SurfaceView surfaceV = mUserItem.getSurfaceView();
//                if (surfaceV != null) {
//                    mUserItem = new UserItem(uid, surfaceV, true);
//                }
//
//                if(liveRoomEventListen!=null){
//                    liveRoomEventListen.onJoinChannelSucces(mUserItem);
//                }
//
//            }
//        });
//    }
//
//
//
//    /**当用户不在线时*/
//    @Override
//    public void onUserOffline(int uid, int reason) {
//        log.debug("onUserOffline " + (uid & 0xFFFFFFFFL) + " " + reason);
//        doRemoveRemoteUi(uid);
//    }
//
//    /**当用户加入时*/
//    @Override
//    public void onUserJoined(int uid, int elapsed) {
//        log.debug("onUserJoined " + (uid & 0XFFFFFFFFL) + " ");
//        doRenderRemoteUi(uid);
//
//    }
//
//    /**添加远程视频ui*/
//    public void doRemoveRemoteUi(final int uid) {
//        activity.runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
//                if (activity.isFinishing()) {
//                    return;
//                }
//                int position = -1;
//                log.debug("doRemoveRemoteUi isBroadcaster() :" + " uid :" + uid);
//
//                    for (int i = 0; i < userItemList.size(); i++) {
//                        if (userItemList.get(i).getUid() == uid) {
//                            position = i;
//                            break;
//                        }
//
//                    }
//                    if (position >= 0) {
//                        UserItem removeItem = userItemList.remove(position);
//                        if(liveRoomEventListen!=null)
//                        {
//                            liveRoomEventListen.doRemoveRrmoteUi(removeItem);
//                        }
//                    }
//
//                log.debug("doRemoveRemoteUi " + (uid & 0xFFFFFFFFL));
//
//
//            }
//        });
//    }
//
//
//
//    /**刷新小视频*/
//    public void refreshSmallVideoView(int position) {
//        // list uid ,small window
//        if (userItemList.size() > 0 && position < userItemList.size()) {
//
//            if (config().mUid == userItemList.get(position).getUid()) {
//                userItemList.get(position).setmIsUserSelf(true);
//                rtcEngine().setupLocalVideo(new VideoCanvas(userItemList.get(position).getSurfaceView(), VideoCanvas.RENDER_MODE_HIDDEN, userItemList.get(position).getUid()));
//
//            } else {
//                log.debug("refreshSmallVideoView position:" + position);
//                userItemList.get(position).setmIsUserSelf(false);
//                rtcEngine().setupRemoteVideo(new VideoCanvas(userItemList.get(position).getSurfaceView(), VideoCanvas.RENDER_MODE_HIDDEN, userItemList.get(position).getUid()));
//                requestRemoteStreamType(userItemList.get(position).getUid(), Constants.VIDEO_STREAM_LOW);
//            }
//
//        }
//
//
//    }
//
//
//    /**刷新大视频*/
//    public void refreshBigVideoView() {
//
//        SurfaceView surfaceV = RtcEngine.CreateRendererView(activity);
////        mParentView.removeView(mUserItem.getSurfaceView());
////        mParentView.addView(surfaceV, 0);
//        mUserItem.setSurfaceView(surfaceV);
//
//        //bit window
//        if (config().mUid == mUserItem.getUid()) {
//
//            rtcEngine().setupLocalVideo(new VideoCanvas(surfaceV, VideoCanvas.RENDER_MODE_HIDDEN, mUserItem.getUid()));
//        } else {
//
//            requestRemoteStreamType(mUserItem.getUid(), Constants.VIDEO_STREAM_HIGH);
//            rtcEngine().setupRemoteVideo(new VideoCanvas(surfaceV, VideoCanvas.RENDER_MODE_HIDDEN, mUserItem.getUid()));
//
//        }
//
//    }
//
//    /**请求远程数据流类型
//     *
//     * @param uid
//     * @param streamtype
//     */
//
//    public void requestRemoteStreamType(final int uid, final int streamtype) {
//        log.debug("requestRemoteStreamType uid : " + uid);
//        new Handler().postDelayed(new Runnable() {
//            @Override
//            public void run() {
//
//                rtcEngine().setRemoteVideoStreamType(uid, streamtype);//Constants.VIDEO_STREAM_LOW
//
//            }
//        }, 500);
//    }
//
//
//
//
//    /**使指定的postion音视频推流可用*/
//    public void positionMute(int position) {
//        log.debug("onMuteClick position:" + position);
//        if (position >= 0 && position < userItemList.size()) {
//            userItemList.get(position).setmIsMuteStream(true);
//            rtcEngine().muteRemoteAudioStream(userItemList.get(position).getUid(), true);
//            rtcEngine().muteRemoteVideoStream(userItemList.get(position).getUid(), true);
//        }
//
//    }
//
//    /**指定postion停止播放*/
//    public void positionStop(int position) {
//        log.debug("onPlayClick position:" + position);
//        if (position >= 0 && position < userItemList.size()) {
//            userItemList.get(position).setmIsMuteStream(false);
//            int uid = userItemList.get(position).getUid();
//            rtcEngine().muteRemoteAudioStream(uid, false);
//            rtcEngine().muteRemoteVideoStream(uid, false);
//            requestRemoteStreamType(uid, Constants.VIDEO_STREAM_LOW);
//        }
//
//    }
//    /**指定position 刷新*/
//    public void onSurfaceDoubleClick(int position) {
//
//        log.debug("onSurfaceDoubleClick position:" + position);
//
//        if (position >= 0 && position < userItemList.size()) {
//
//            //mute state unable change view
//            if (!userItemList.get(position).ismIsMuteStream()) {
//
//                int tempuid = mUserItem.getUid();
//                mUserItem.setUid(userItemList.get(position).getUid());
//
//                userItemList.get(position).setUid(tempuid);
//
//                refreshBigVideoView();
//                refreshSmallVideoView(position);
//            }
//
//        }
//
//    }
//
//    /**是否存在uid*/
//    public boolean isExitUid(int uid) {
//        for (int i = 0; i < userItemList.size(); i++) {
//
//            if (userItemList.get(i).getUid() == uid) {
//                log.debug("already added to UI, ignore it " + (uid & 0xFFFFFFFFL) + " ");
//                return true;
//            }
//        }
//        return false;
//    }
//
//    public void initModeState() {
//
//    }
//
//
//    public int firstVisibleItem;
//    public int visibleItemCount;
//    public int allItems;
//    public RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
//        @Override
//        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//            super.onScrolled(recyclerView, dx, dy);
//
//            if (stateMode == MODE_SHOW_FOUR) {
//                GridLayoutManager l = (GridLayoutManager) recyclerView.getLayoutManager();
//                int tempFirstVisibleItem = l.findFirstVisibleItemPosition();
//                int tempVisibleItemCount = l.getChildCount();
//                int tempAllItems = l.getItemCount();
//                if (tempFirstVisibleItem == firstVisibleItem && tempVisibleItemCount == visibleItemCount && tempAllItems == allItems) {
//                    return;
//                }
//                firstVisibleItem = tempFirstVisibleItem;
//                visibleItemCount = tempVisibleItemCount;
//                allItems = tempAllItems;
//                muteInvisibleItem(firstVisibleItem, visibleItemCount, allItems);
//            }
//
//        }
//    };
//
//    public void muteInvisibleItem(int firstVisibleItem, int visibleItemCount, int allItems) {
//        if (allItems == userItemList.size()) {
//            for (int i = 0; i < allItems; i++) {
//                UserItem mUserStatusData = userItemList.get(i);
//                if (i >= firstVisibleItem && i < firstVisibleItem + visibleItemCount) {
//                    rtcEngine().muteRemoteAudioStream(mUserStatusData.getUid(), false);
//                    rtcEngine().muteRemoteVideoStream(mUserStatusData.getUid(), false);
//                    requestRemoteStreamType(mUserStatusData.getUid(), Constants.VIDEO_STREAM_HIGH);
//                } else {
//                    rtcEngine().muteRemoteAudioStream(mUserStatusData.getUid(), true);
//                    rtcEngine().muteRemoteVideoStream(mUserStatusData.getUid(), true);
//                }
//            }
//        }
//    }
//
//    public RtcEngine rtcEngine() {
//        return ((moni.anyou.com.view.config.AnyouerApplication) activity.getApplication()).getWorkerThread().getRtcEngine();
//    }
//
//    public final WorkerThread worker() {
//        return ((AnyouerApplication) activity.getApplication()).getWorkerThread();
//    }
//
//    public final EngineConfig config() {
//        return ((AnyouerApplication) activity.getApplication()).getWorkerThread().getEngineConfig();
//    }
//
//    public final MyEngineEventHandler event() {
//        return ((AnyouerApplication) activity.getApplication()).getWorkerThread().eventHandler();
//    }
//
//    public final void showLongToast(final String msg) {
//       activity.runOnUiThread(new Runnable() {
//            @Override
//            public void run() {
//                Toast.makeText(activity, msg, Toast.LENGTH_LONG).show();
//            }
//        });
//    }
//
//}
